home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / system / mail / transpor / ifmail23.z / ifmail23 / ifmail / ifcico / statetbl.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-09  |  935 b   |  53 lines

  1. #ifndef STATETBL_H
  2. #define STATETBL_H
  3.  
  4. #define SM_DECL(proc,name) \
  5. int proc(void)\
  6. {\
  7.     int sm_success=0;\
  8.     char *sm_name=name;
  9.  
  10. #define SM_STATES \
  11.     enum {
  12.  
  13. #define SM_NAMES \
  14.     } sm_state;\
  15.     char * sm_sname[] = {
  16.  
  17. #define SM_EDECL \
  18.     };
  19.  
  20. #define SM_START(x) \
  21.     sm_state=x;\
  22.     debug(14,"statemachine %s start %s (%d)",\
  23.         sm_name,sm_sname[sm_state],sm_state);\
  24.     while (!sm_success) switch (sm_state)\
  25.     {\
  26.     default: logerr("statemachine %s error: state=%d",sm_name,sm_state);\
  27.         sm_success=-1;
  28.  
  29. #define SM_STATE(x) \
  30.     break;\
  31.     case x: debug(15,"statemachine %s entering %s (%d)",\
  32.         sm_name,sm_sname[sm_state],sm_state);
  33.  
  34. #define SM_END \
  35.     }\
  36.     debug(14,"statemachine %s exit %s (%d)",\
  37.         sm_name,(sm_success == -1)?"error":"success",sm_success);
  38.  
  39. #define SM_RETURN \
  40.     return (sm_success != 1);\
  41. }
  42.  
  43. #define SM_PROCEED(x) \
  44.     sm_state=x; break;
  45.  
  46. #define SM_SUCCESS \
  47.     sm_success=1; break;
  48.  
  49. #define SM_ERROR \
  50.     sm_success=-1; break;
  51.  
  52. #endif
  53.